package br.com.hibernate;

import org.hibernate.Session;

public class DAO<T> {

    private Session session = null;

    public void saveOrUpdate(T objeto) {
        try {
            getSession().beginTransaction();
            getSession().saveOrUpdate(objeto);
            getSession().getTransaction().commit();
        } catch (Exception exception) {
            rollback(exception, "saveOrUpdate");
        } finally {
            closeSession();
        }
    }

    private Session getSession() {
        if (session == null) {
            session = HibernateUtil.getSessionfactory().openSession();
        }
        return session;
    }

    private void rollback(Exception e, String operacao) {
        if (getSession().getTransaction().isActive()) {
            getSession().getTransaction().rollback();
        }
        System.out.println("Não foi possível executar a operação de " + operacao + ". "
                + "Erro: " + e.getMessage());
    }

    private void closeSession() {
        if (getSession().isOpen()) {
            getSession().close();
        }
        session = null;
    }
}